#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <math.h>
#include "float.h"

using namespace std;

int t;	/* Precisión. */

/* Primer Método */
Float Gregory(int n)
{
    Float r = Float (t, 0); /* Resultado */
    Float a;
    
    for (int i = 0; i <= n; i++)
    {
        a = Float(t, 2*i + 1);
        
        if (i % 2 == 0)
			r = r + Float(t, 1.0)/a;
		else
			r = r - Float(t, 1.0)/a;
    }
        
    return r;
}

/* Segundo Método */
Float arctan(int n, Float x)
{
    Float r = Float (t, 0); /* Resultado */
    Float aux, a, b;    
    
    for (int i = 0; i <= n; i++)
    {
        aux = Float(t, 2*i + 1);
        a 	= Float(t, 1.0)/aux;
        b 	= x^aux;
        
        if (i % 2 == 0)
			r = r + (a * b);
		else
			r = r - (a * b);
    }
    
    return r;
}


Float factorial(int n)
{
	Float res = Float(t, 1);
	
	for (int i = 2; i <= n; i++)	
		res = res * Float(t, i);
	
	return res;
}

/* Tercer Método */
Float Ramanujan(int n)
{
    Float r = Float(t, 0); /* Resultado */
    Float a, b, c, d;
    
    for (int i = 0; i <= n; i++)
    {
        a = factorial(4*i); 
        b = Float(t, 1103.0 + 26390.0 * i);
        c = factorial(i) ^ Float(t, 4.0);
        d = Float(t, 396.0) ^ Float(t, 4*i);
        
       //~ cout << " a: " << a << " b: " << b << " c: " << c << " d: " << d << endl;
        
        r = r + ((a * b) / (c * d));
 
    }
    
    return r;
}

long double err(long double aprox, long double real)
{
	return fabs(aprox - real)/fabs(real);
}


int main()
{	
	ifstream entrada	("Casos.in");
	ofstream salida1	("G.out");
	ofstream salida2	("M.out");
	ofstream salida3	("R.out");
	
	int casos, n1, n2, n3;
	entrada >> casos;	
	
	while (casos != 0) 
	{
		entrada >> t;
		Float pi = Float(t, 3.1415926535897932384626433832795028841971693993751058209749);
		
		salida1.precision(t);
		salida2.precision(t);
		salida3.precision(t);
		
		Float res;
		/* Corro primer método. */
		entrada >> n1;
		res = Gregory(n1);
		res = res * Float(t, 4.0);	
		/* Precisión, n, resultado, error relativo. */
		salida1 << t << "  "; 
		salida1 << setfill ('0') << setw (3);
		salida1 << n1 << " ";
		salida1 << setfill (' ') << setw (51);
		salida1 << res.value() << "     " << err(res.value(), pi.value()) << endl;
		
		/* Corro segundo método. */
		entrada >> n2;
		Float a = Float(t, 0.2);
		Float b = Float(t, 1.0) / Float(t, 239.0);
    	res = Float(t, 4.0)*arctan(n2, a) - arctan(n2, b);
		res = res * Float(t, 4.0);	
		/* Precisión, n, resultado, error relativo. */
		salida2 << t << "  "; 
		salida2 << setfill ('0') << setw (3);
		salida2 << n2 << " ";
		salida2 << setfill (' ') << setw (51);
		salida2 << res.value() << "     " << err(res.value(), pi.value()) << endl;
				
		/* Corro tercer método. */
		entrada >> n3;
		res = (Float(t, sqrt(8)) / Float(t, 9801.0)) * Ramanujan(n3);
		res = Float(t, 1.0) / res;
		/* Precisión, n, resultado, error relativo. */
		salida3 << t << "  "; 
		salida3 << setfill ('0') << setw (3);
		salida3 << n3 << " ";
		salida3 << setfill (' ') << setw (51);
		salida3 << res.value() << "     " << err(res.value(), pi.value()) << endl;
		
		casos --;
	}
	
    return 0;
}
